﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;

namespace Galaktika.BI.Charting.PivotChart
{
    public class PieSectorProperties
    {
        public PieSectorProperties()
        {
            m_InternalUpdating = true;

            //Устанавливаем настройки по-умолчанию
            SetDefaultSettings();

            m_InternalUpdating = false;
            //RaisePropertyChanged();
        }

        /// <summary>
        /// Флаг внутреннего обновления значений. 
        /// </summary>
        protected bool m_InternalUpdating;

        public delegate void EventHandler(object sender, EventArgs e);
        /// <summary>
        /// Событие - произошло изменение свойств
        /// </summary>
        public event EventHandler PropertyChanged;

        protected void RaisePropertyChanged()
        {
            //В случае внутреннего обновления значений событие не генерируем
            if (m_InternalUpdating)
                return;

            EventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, EventArgs.Empty);
        }

        /// <summary>
        /// Устанавливает настройки по-умолчанию
        /// </summary>
        public void SetDefaultSettings()
        {
            ABackColor = Colors.Transparent;
            ADepth = -1;
            AFormatString = String.Empty;//"{value|2 ,}";
            AOpacity = 1;

            AIndent = 0;
        }

        #region Настройки цветов
        private Color m_BackColor;
        /// <summary>
        /// Цвет серии
        /// </summary>
        public Color ABackColor
        {
            get
            {
                return m_BackColor;
            }
            set
            {
                m_BackColor = value;
                RaisePropertyChanged();
            }
        }
        #endregion Настройки цветов

        private int m_Depth;
        /// <summary>
        /// Глубина объемности графика
        /// </summary>
        public int ADepth
        {
            get
            {
                return m_Depth;
            }
            set
            {
                m_Depth = value;
                RaisePropertyChanged();
            }
        }

        private String m_FormatString;
        /// <summary>
        /// Формат значений на графике. 
        /// </summary>
        public String AFormatString
        {
            get
            {
                return m_FormatString;
            }
            set
            {
                m_FormatString = value;
                RaisePropertyChanged();
            }
        }

        private int m_Indent;
        /// <summary>
        /// Удалённость сектора от центра
        /// </summary>
        public int AIndent
        {
            get
            {
                return m_Indent;
            }
            set
            {
                m_Indent = value;
                RaisePropertyChanged();
            }
        }

        private double m_Opacity;
        /// <summary>
        /// Прозрачность
        /// </summary>
        public double AOpacity
        {
            get
            {
                return m_Opacity;
            }
            set
            {
                m_Opacity = value;
                RaisePropertyChanged();
            }
        }
    }
    
    public class PieSectorPropertiesCollection : Collection<PieSectorProperties>
    {
        private object m_Owner = null;
        public object Owner
        {
            get
            {
                return m_Owner;
            }
            set
            {
                m_Owner = value;
            }
        }

        public PieSectorPropertiesCollection()
            : base()
        {
        }

        //Событие - изменение коллекции
        public event EventHandler CollectionModified;

        public void RaiseCollectionModified()
        {
            EventHandler handler = CollectionModified;
            if (handler != null)
                handler(this, EventArgs.Empty);

        }
    }
}
